import java.util.HashMap;
import java.util.Map;

/**
 * 13 罗马数字转整数
 *
 * @author suncp
 * @date 2020/12/25 16:46
 */
public class RomainToInt {
    public static void main(String[] args) {
        String s = "IV";
        int i = romanToInt2(s);
        System.out.println(i);
    }

    /**
     * 4ms|38.5MB
     * @param s
     * @return
     */
    public static int romanToInt2(String s) {
        // 初始化数据
        char[] romanChar = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
        int[] romanInt = {1, 5, 10, 50, 100, 500, 1000};
        int sum = 0;
        // 1. 字符串转字符数组
        char[] chars = s.toCharArray();
        // 2. 判断是否是否为空, 判断是否只有一位
        if (s == null || s.equals("")) {
            return 0;
        }
        // 3. 第一位和第二位比较, 1>2-->1位变负号
        int x = 0;
        int y = 0;
        if (chars.length == 1) {
            for (int i1 = 0; i1 < romanChar.length; i1++) {
                if (romanChar[i1] == chars[chars.length-1]) {
                    y = romanInt[i1];
                    break;
                }
            }
        }
        for (int i = 1; i < chars.length; i++) {
            for (int i1 = 0; i1 < romanChar.length; i1++) {
                if (romanChar[i1] == chars[i - 1]) {
                    x = romanInt[i1];
                }
                if (romanChar[i1] == chars[i]) {
                    y = romanInt[i1];
                }
            }
            if (x < y) {
                sum += -x;
            } else {
                sum += x;
            }
        }
        // 4. 求和
        sum += y;
        return sum;
    }

    /**
     * 7ms|38.8MB
     * @param s
     * @return
     */
    public static int romanToInt(String s) {
        // 初始化数据
        Map<Character, Integer> map = new HashMap<>();
        map.put('I', 1);
        map.put('V', 5);
        map.put('X', 10);
        map.put('L', 50);
        map.put('C', 100);
        map.put('D', 500);
        map.put('M', 1000);
        int sum = 0;
        // 1. 字符串转字符数组
        char[] chars = s.toCharArray();
        // 2. 判断是否是否为空, 判断是否只有一位
        if (s == null || s.equals("")) {
            return 0;
        }
        // 3. 第一位和第二位比较, 1>2-->1位变负号
        for (int i = 1; i < chars.length; i++) {
            if (map.get(chars[i - 1]) < map.get(chars[i])) {
                sum += -map.get(chars[i - 1]);
            } else {
                sum += map.get(chars[i - 1]);
            }
        }
        // 4. 求和
        sum += map.get(chars[chars.length - 1]);
        return sum;
    }
}
